package com.demo.java.OD501_550.OD518;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【九宫格按键输入法(C卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146484158
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();  // 读取输入的字符串

        Map<Character, String> characterStringMap = buildMap();  // 构建数字到字符集的映射
        boolean isNumber = true;  // 初始化为数字模式
        StringBuffer stringBuffer = new StringBuffer();  // 用于拼接最终结果
        int inputLength = input.length();

        for (int i = 0; i < inputLength; i++) {
            char ch = input.charAt(i);  // 获取当前字符

            // # 切换输入法
            if (ch == '#') {
                isNumber = !isNumber;  // 切换模式
                continue;  // 跳过当前字符
            }

            // / 忽略此字符
            if (ch == '/') {
                continue;  // 跳过分隔符
            }

            // 如果是数字模式，直接输出数字
            if (isNumber) {
                stringBuffer.append(ch);
                continue;
            }

            // 如果是字母模式
            if (ch == '0') {
                stringBuffer.append(" ");  // 数字0对应空格
                continue;
            }

            // 计算字符的重复次数
            int repeatCharNum = getRepeatCharNum(input, inputLength, ch, i);
            i = i + repeatCharNum;  // 跳过重复字符的索引

            // 获取当前数字对应的字母集
            String ziMu = characterStringMap.get(ch);

            // 根据重复次数，选择相应的字母
            if (repeatCharNum > 0) {
                int index = repeatCharNum % ziMu.length();
                stringBuffer.append(ziMu.charAt(index));
            } else {
                stringBuffer.append(ziMu.charAt(repeatCharNum));
            }
        }

        // 输出结果
        System.out.println(stringBuffer.toString());
    }

    // 获取当前字符重复的次数
    private static int getRepeatCharNum(String input, int inputLength, char ch, int i) {
        int repeatCharNum = 0;
        for (int j = i + 1; j < inputLength; j++) {
            char next = input.charAt(j);
            if (next == '/') {
                break;  // 直到遇到分隔符跳出
            }
            if (ch != next) {
                break;  // 当前字符与下一个字符不相等时跳出
            }
            repeatCharNum++;  // 继续计数
        }
        return repeatCharNum;  // 返回重复次数
    }

    // 构建数字到字母的映射
    private static Map<Character, String> buildMap() {
        Map<Character, String> map = new HashMap<>();
        map.put('1', ",.");  // '1'映射为",."
        map.put('2', "abc");  // '2'映射为"abc"
        map.put('3', "def");  // '3'映射为"def"
        map.put('4', "ghi");  // '4'映射为"ghi"
        map.put('5', "jkl");  // '5'映射为"jkl"
        map.put('6', "mno");  // '6'映射为"mno"
        map.put('7', "pqrs"); // '7'映射为"pqrs"
        map.put('8', "tuv");  // '8'映射为"tuv"
        map.put('9', "wxyz"); // '9'映射为"wxyz"
        return map;
    }
}